package annuaire.rmi.remotedObject;

import java.io.Serializable;
import java.rmi.Remote;
import java.rmi.RemoteException;

import annuaire.exceptions.BusinessException;
import annuaire.exceptions.PermissionException;

/**
 * Interface représentant n'importe quel utilisateur.
 * 
 * @author Yannick Lorenzati & Stephanie Malakian
 * 
 */
public interface IRemotedUser extends Remote {

	/**
	 * Permet de se désauthentifier.
	 * 
	 * @throws RemoteException
	 */
	public void logout() throws RemoteException;

	/**
	 * Permet d'accéder au service étudiant si on en a les droits.
	 * 
	 * @return Une interface vers le service étudiant.
	 * @throws RemoteException
	 * @throws PermissionException
	 */
	public IStudentService getStudentService() throws RemoteException,
			PermissionException;

	/**
	 * Permet d'accéder au service administrateur si on en a les droits.
	 * 
	 * @return Une interface vers le service administrateur.
	 * @throws RemoteException
	 * @throws PermissionException
	 */
	public IAdminService getAdminService() throws RemoteException,
			PermissionException;

	/**
	 * Renvoie les données associées à un utilisateur.
	 * 
	 * @return Données associées à un utilisateur.
	 * @throws RemoteException
	 * @throws BusinessException
	 */
	public Serializable getBeans() throws RemoteException, BusinessException;

	/**
	 * Renvoie le role de l'utilisateur
	 * 
	 * @return role utilisateur
	 * @throws RemoteException
	 */
	public String getRole() throws RemoteException;

	/**
	 * Met à jour les données de l'utilisateur.
	 * 
	 * @param newBeans
	 * @throws Exception
	 */
	public void updateBeans(Serializable newBeans) throws Exception;
}
